package TestDemo;

public class A {
    int a=10;
    int b=20;
  public void printA(){
      System.out.println("A类中的printfA");
    }
    public void printB() {
        System.out.println("A类中的printfB");
    }
}
class B extends A {
    int a = 30;
    int b = 40;
    public void printA(int a) {
        System.out.println("B类中的printA");
    }
    public void printB() {
        System.out.println("B类中的printB");
    }
    public void printC() {
        System.out.println("B类中的printC");
    }

    public void printD() {
        // 对于同名的成员变量，直接访问时，访问的都是子类的
        System.out.println(a); // 等价于： this.a = 30;
        System.out.println(b); // 等价于： this.b = 40;
        // 注意：this是当前对象的引用
        // 访问父类的成员变量时，需要借助super关键字
        // super是获取到子类对象中从基类继承下来的部分
        System.out.println(super.a);//访问父类的成员变量a
        System.out.println(super.b);//访问父类的成员变量b
        // 父类和子类中构成重载的方法，直接可以通过参数列表区分清访问父类还是子类方法
        printA(); // 没有传参，访问父类中的printA()
        printA(20); // 传递int参数，访问子类中的printA(int)
        // 直接访问，则永远访问到的都是子类中的printB()，基类的无法访问到
        printB();
        // 如果在子类中要访问重写的基类方法，则需要借助super关键字
        super.printB();
        //先从子类中查找方法，查找不到再去基类，如果还是找不到就报错
        printC();

    }

}
class Main {

    public static void main(String[] args) {
        B p1 = new B();
        p1.printD();
    }
}



    //public static void main1(String[] args) {
//        B p1=new B();//实例化一个B类
//        System.out.println(p1.a);//输出30
//        System.out.println(p1.b);//a
//        System.out.println(p1.c);//30
//        System.out.println(p1.d);//50
        //System.out.println(p1.e);编译失败，子类父类都没有e这个变量

//    }
